﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;

namespace HelloLLLLL.Blog
{
    public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            // 在应用程序启动时运行的代码
            int count = 0;
            StreamReader srd;
            //取得文件的实际路径
            string file_path = Server.MapPath("/counter.txt");
            //打开文件进行读取
            srd = File.OpenText(file_path);
            while (srd.Peek() != -1)
            {
                string str = srd.ReadLine();
                count = int.Parse(str);

            }
            srd.Close();
            object obj = count;
            //将从文件中读取的网站访问量存放在Application对象中
            Application["counter"] = obj;
            Application["everyDayCount"] = 0;
            Application["recordDate"] = DateTime.Now;

        }
        void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            HttpApplication app = sender as HttpApplication;
            string url = app.Context.Request.Url.ToString().ToLower();
            if (!url.Contains(".ashx")&&url.Contains("admin")&&!url.Contains("adminlogin"))
            {
                if (!app.Context.Request.IsAuthenticated)
                {
                    app.Context.Response.Redirect("/Admin/AdminLogin.aspx");
                }
            }
        }

        void Application_Error(object sender, EventArgs e)
        {
            // 在出现未处理的错误时运行的代码

        }

        void Session_Start(object sender, EventArgs e)
        {
            // 在新会话启动时运行的代码
            Application.Lock();
            //数据累加
            int Stat = 0;
            //获取Application对象中保存的网站总访问量
            Stat = (int)Application["counter"];
            Stat += 1;
            object obj = Stat;
            Application["counter"] = obj;
            //将数据记录写入文件
            string file_path = Server.MapPath("/counter.txt");
            StreamWriter srw = new StreamWriter(file_path, false);
            srw.WriteLine(Stat);
            srw.Close();

            DateTime recordDate = (DateTime)Application["recordDate"];
            DateTime nowDate = DateTime.Now;
            if (recordDate.Year == nowDate.Year && recordDate.Month == nowDate.Month && recordDate.Day == nowDate.Day)
            {
                Application["everyDayCount"] = (int)Application["everyDayCount"] + 1;
            }
            else
            {
                Application["everyDayCount"] = 1;
                Application["recordDate"] = nowDate;

            }



            Application.UnLock();

        }

        void Session_End(object sender, EventArgs e)
        {
            // 在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时，才会引发 Session_End 事件。如果会话模式设置为 StateServer 
            // 或 SQLServer，则不会引发该事件。

        }
    }
}